package com.kuzlak.cms.module.shop.controller;

import cn.hutool.core.bean.BeanUtil;
import com.kuzlak.cms.bean.MyPage;
import com.kuzlak.cms.bean.Result;
import com.kuzlak.cms.module.shop.bean.ShopInfoVO;
import com.kuzlak.cms.module.shop.entity.ShopInfo;

import com.kuzlak.cms.module.shop.service.ShopInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Tag(name = "商店信息管理")
@RestController
@RequestMapping("shop/info")
public class ShopInfoController {
    @Autowired
    private ShopInfoService service;

    /**
     * 获取商店信息列表。
     *
     * @param page     页码，默认为0
     * @param pagesize 每页大小，默认为10
     * @return 包含商店信息列表的Result对象
     */
    @Operation(summary = "获取商店信息列表", description = "分页查询商店信息")

    @GetMapping("list")
    public Result list(@RequestParam(name = "page", defaultValue = "0") int page, @RequestParam(name = "pagesize", defaultValue = "10") int pagesize) {
        MyPage<ShopInfo> list = service.findByPage(page, pagesize);
        return Result.ok(list);
    }

    /**
     * 添加新的商店信息。
     *
     * @param param 商店信息参数，以JSON形式传入
     * @return 表示添加操作是否成功的Result对象
     */
    @Operation(summary = "添加或更新", description = "创建并保存新的商店信息或根据ID更新商店信息")
    @PostMapping("edit")
    public Result edit(@RequestBody ShopInfoVO param) {
        ShopInfo data = BeanUtil.toBean(param, ShopInfo.class);
        if (data.getId() == null) {
            data.setId(0L);
        }
        boolean b = false;
        if (data.getId() > 0) {
            b = service.updateById(data);
        }else {
            b = service.save(data);
        }

        return b ? Result.ok() : Result.failure();
    }


    /**
     * 删除指定ID的商店信息。
     *
     * @param id 要删除的商店信息的ID
     * @return 表示删除操作是否成功的Result对象
     */
    @Operation(summary = "删除", description = "根据ID删除商店信息")
    @GetMapping("delete")
    public Result delete(@RequestParam("id") long id) {
        boolean b = service.removeById(id);
        return b?Result.ok():Result.failure();
    }
}
